正则表达式和来自 HTML 的 urllib.request 到 __scrape__ 的链接
regex and urllib.request to __scrape__ links from HTML
我正在尝试解析 HTML 以提取此正则表达式构造中的所有值:
href="http//.+?"
这是代码:
import urllib.request
import re
url = input('Enter - ')
html = urllib.request.urlopen(url).read()
links = re.findall('href="(http://.*?)"',html)
for link in links:
print(link)
但我收到一条错误消息:
类型错误:不能在类似字节的对象上使用字符串模式
你的html
是一个字节串,使用str(html)
:
re.findall(r'href="(http://.*?)"',str(html))
或者,使用字节模式:
re.findall(rb'href="(http://.*?)"',html)
urlopen(url)
returns 字节对象。所以你的 html
变量也包含字节。您可以使用类似这样的方式对其进行解码:
htmlobject = urllib.request.urlopen(url)
html = htmlobject.read().decode('utf-8')
然后你可以在你的正则表达式中使用 html
现在是一个字符串。
如果您想要一个页面上的所有链接,您甚至不必使用正则表达式。因为你可以只使用 bs4 来获得你需要的东西:-)
import requests
import bs4
soup = bs4.BeautifulSoup(requests.get('https://dr.dk/').text, 'lxml')
links = soup.find_all('a', href=True)
[print(i['href']) for i in links]
希望对您有所帮助。祝项目顺利 ;-)
我正在尝试解析 HTML 以提取此正则表达式构造中的所有值: href="http//.+?"
这是代码:
import urllib.request
import re
url = input('Enter - ')
html = urllib.request.urlopen(url).read()
links = re.findall('href="(http://.*?)"',html)
for link in links:
print(link)
但我收到一条错误消息: 类型错误:不能在类似字节的对象上使用字符串模式
你的html
是一个字节串,使用str(html)
:
re.findall(r'href="(http://.*?)"',str(html))
或者,使用字节模式:
re.findall(rb'href="(http://.*?)"',html)
urlopen(url)
returns 字节对象。所以你的 html
变量也包含字节。您可以使用类似这样的方式对其进行解码:
htmlobject = urllib.request.urlopen(url)
html = htmlobject.read().decode('utf-8')
然后你可以在你的正则表达式中使用 html
现在是一个字符串。
如果您想要一个页面上的所有链接,您甚至不必使用正则表达式。因为你可以只使用 bs4 来获得你需要的东西:-)
import requests
import bs4
soup = bs4.BeautifulSoup(requests.get('https://dr.dk/').text, 'lxml')
links = soup.find_all('a', href=True)
[print(i['href']) for i in links]
希望对您有所帮助。祝项目顺利 ;-)