WangJS 发表于 2020-6-7 15:29:26

[求助] 爬豆瓣Top250的亿点小问题

本帖最后由 WangJS 于 2020-6-7 15:30 编辑

爬虫的前面都没有问题



就是到了第10页,有四个电影没有简介



就出现了简介与电影名对不上的问题

因为zip的问题,最后面4个电影都没有保存到列表里

我自己也想了个办法:
就是判断一下有没有<p class="quote">这个标签,没有就把简介一项设为空的

最后发现自己不会爬取一小部分的源代码{:10_266:}
所以来求助了



这是我现在的代码:
import requests
import openpyxl
from lxml import etree

"""
先创建一个表格
"""

# 实例化
wb = openpyxl.Workbook()
sheet = wb.active
sheet.title = 'Top250'
sheet.append(['序号', '名称', '评分', '简介'])
sheet.column_dimensions['B'].width = 30

"""
爬虫 + 写入表格
"""
# 请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'}
# 第一页的url
url = "https://movie.douban.com/top250?start=0&filter="

# 共10页,循环10次
for zzz in range(10):
    # 获取源代码
    Res = requests.get(url, headers=headers).text
    # 解析代码
    data = etree.HTML(Res)
    # 获取电影相关
    index = data.xpath('//em[@class=""]')
    name = data.xpath('//div[@class="hd"]//span[@class="title"]')
    score = data.xpath('//span[@class ="rating_num"]')
    Introduction = data.xpath('//p[@class="quote"]/span[@class="inq"]')
    # 打印单个电影相关
    for dx, n, s, i, x in zip(index, name, score, Introduction, range(1, 251)):
      index_text = dx.text
      name_text = n.text
      score_text = s.text
      Introduction_text = i.text

      end_list =

      # print(end_list)
      sheet.append(end_list)
      if zzz != 9:
            z_url = data.xpath('//span[@class="next"]//@href')
    # 拼接下一页链接
    url = 'https://movie.douban.com/top250' + z_url

"""
保存表格
"""

wb.save(r"C:\Users\86185\Desktop\豆瓣Top250.xlsx")
print('保存成功!')

先谢谢大佬们了{:10_254:}

qiuyouzhi 发表于 2020-6-7 15:52:21

最后发现自己不会爬取一小部分的源代码
这个是什么意思?

WangJS 发表于 2020-6-7 15:55:12

qiuyouzhi 发表于 2020-6-7 15:52
这个是什么意思?

我想把bd标签里的所有代码爬下来
然后判断有没有p class="quote"
但是……不会啊{:10_250:}

qiuyouzhi 发表于 2020-6-7 16:08:40

WangJS 发表于 2020-6-7 15:55
我想把bd标签里的所有代码爬下来
然后判断有没有p class="quote"
但是……不会啊

你直接用xpath判断呗
xpath('/p[@class="quote"]')
/p前面填路径,然后看列表是否为空不就得了

WangJS 发表于 2020-6-7 16:12:28

qiuyouzhi 发表于 2020-6-7 16:08
你直接用xpath判断呗
xpath('/p[@class="quote"]')
/p前面填路径,然后看列表是否为空不就得了

具体咋做呢?

帮忙改一下呗{:10_254:}
我自己做的就是没有这个标签就直接跳过了{:10_266:}

Twilight6 发表于 2020-6-7 17:30:17

qiuyouzhi 发表于 2020-6-7 16:08
你直接用xpath判断呗
xpath('/p[@class="quote"]')
/p前面填路径,然后看列表是否为空不就得了

这样不行吧,Xpath 如果没匹配到会直接忽略掉这次匹配,匹配下一个对应的

WangJS 发表于 2020-6-10 17:04:08

Twilight6 发表于 2020-6-7 17:30
这样不行吧,Xpath 如果没匹配到会直接忽略掉这次匹配,匹配下一个对应的

是啊,都没有没有这个标签{:10_266:}

Twilight6 发表于 2020-6-10 17:06:42

WangJS 发表于 2020-6-10 17:04
是啊,都没有没有这个标签

{:10_277:}过了 0202年了才回复,我已经是这个账号的 第九代传人了

WangJS 发表于 2020-6-10 17:08:13

Twilight6 发表于 2020-6-10 17:06
过了 0202年了才回复,我已经是这个账号的 第九代传人了

{:10_277:}

Mike_python小 发表于 2020-6-10 17:47:44

Twilight6 发表于 2020-6-10 17:06
过了 0202年了才回复,我已经是这个账号的 第九代传人了

????????????????????????????????????????????????
页: [1]
查看完整版本: [求助] 爬豆瓣Top250的亿点小问题