使用re处理爬取内容时,re不能正确处理
在http://dongman.2345.com/top/网页上爬取动漫排行,但是在用re处理爬取的动漫简介的时候,它漏下了一个简介,求大神们帮忙找原因。import requests
import re
#获取页面内容
def getHTMLText(url):
try:
r = requests.get(url,timeout = 30)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return ""
#处理页面内容
def fillAniList(ulist,html):
n = re.findall(r'alt\=\".*?\"',html)
#就是在下面这部出的问题
it = re.findall(r'\<p class\=\"pTxt pIntroShow\"\>.*?\<',html)
for i in range(len(n)):
name = n.split('=')
intro = it.split('>')
intro = intro.split('<')
ulist.append(name)
ulist.append(intro)
#输出页面内容
def printAniList(ulist):
for i in range(len(ulist)/2):
print(i+1)
print(ulist)
print(ulist)
#主函数
def main():
url = "http://dongman.2345.com/top/"
uinfo = []
html = getHTMLText(url)
fillAniList(uinfo,html)
printAniList(uinfo)
main()
经过筛查,我发现排名第23名的简介不见了。 本帖最后由 suchocolate 于 2020-4-19 16:52 编辑
以下是我的方法,仅供参考。
import requests
import re
url = 'http://dongman.2345.com/top/'
headers = {'user-agent': 'firefox'}
r = requests.get(url, headers=headers)
r.encoding = 'gbk'
cart_name = re.findall(r'_blank">(.*?)<', r.text)
cart_info = re.findall(r'pIntroShow">(.*?)<', r.text, re.S)
print(cart_name)
print(cart_info)
suchocolate 发表于 2020-4-19 16:49
以下是我的方法,仅供参考。
感谢
suchocolate 发表于 2020-4-19 16:49
以下是我的方法,仅供参考。
我想问一下,我的那个代码问题出在哪
低调的恶棍 发表于 2020-4-19 17:28
我想问一下,我的那个代码问题出在哪
1)你的那行语法没有加re.S,这样如果简介文本里有换行就匹配不到了。
2)另外匹配到了不想要的三角括号,你可以用()来捕获组,这样组外的就不会输出了。
<font color="RoyalBlue"># 以 【_blank">】开头,以【<】结尾,中间的任意内容【.*?】,外头加了括号【()】,这样只返回符合括号内的,头尾就不显示了。</font>
cart_name = re.findall(r'_blank">(.*?)<', r.text)
<font color="RoyalBlue"># 加了【re.S】,让【.】能够匹配换行,这样就可以匹配到多行的文本。</font>
cart_info = re.findall(r'pIntroShow">(.*?)<', r.text, re.S)
页:
[1]