鱼C论坛

 找回密码
 立即注册
查看: 598|回复: 4

[已解决]使用re处理爬取内容时,re不能正确处理

[复制链接]
发表于 2020-4-19 15:45:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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[i].split('=')[1]
        intro = it[i].split('>')[1]
        intro = intro.split('<')[0]
        ulist.append(name)
        ulist.append(intro)

#输出页面内容
def printAniList(ulist):
    for i in range(len(ulist)/2):
        print(i+1)
        print(ulist[2*i])
        print(ulist[2*i+1])

#主函数
def main():
    url = "http://dongman.2345.com/top/"
    uinfo = []
    html = getHTMLText(url)
    fillAniList(uinfo,html)
    printAniList(uinfo)

main()

经过筛查,我发现排名第23名的简介不见了。
最佳答案
2020-4-19 16:49:58
本帖最后由 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)[0:50]
cart_info = re.findall(r'pIntroShow">(.*?)<', r.text, re.S)
print(cart_name)
print(cart_info)


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-19 16:49:58 | 显示全部楼层    本楼为最佳答案   
本帖最后由 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)[0:50]
cart_info = re.findall(r'pIntroShow">(.*?)<', r.text, re.S)
print(cart_name)
print(cart_info)


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-19 17:24:21 | 显示全部楼层
suchocolate 发表于 2020-4-19 16:49
以下是我的方法,仅供参考。

感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-19 17:28:40 | 显示全部楼层
suchocolate 发表于 2020-4-19 16:49
以下是我的方法,仅供参考。

我想问一下,我的那个代码问题出在哪
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-19 18:48:55 | 显示全部楼层
低调的恶棍 发表于 2020-4-19 17:28
我想问一下,我的那个代码问题出在哪

1)你的那行语法没有加re.S,这样如果简介文本里有换行就匹配不到了。
2)另外匹配到了不想要的三角括号,你可以用()来捕获组,这样组外的就不会输出了。
<font color="RoyalBlue"># 以 【_blank">】开头,以【<】结尾,中间的任意内容【.*?】,外头加了括号【()】,这样只返回符合括号内的,头尾就不显示了。</font>
cart_name = re.findall(r'_blank">(.*?)<', r.text)[0:50]
<font color="RoyalBlue"># 加了【re.S】,让【.】能够匹配换行,这样就可以匹配到多行的文本。</font>
cart_info = re.findall(r'pIntroShow">(.*?)<', r.text, re.S)

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 16:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表