鱼C论坛

 找回密码
 立即注册
查看: 1094|回复: 2

[已解决]豆瓣爬取问题

[复制链接]
发表于 2019-8-22 11:48:37 | 显示全部楼层 |阅读模式

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

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

x
豆瓣爬取电影TOP250遇到匹配的问题,标签下内容数量不等,按照现有代码只可以匹配一个信息,麻烦大神解答下
需要爬取的内容如下:
<br>
<span class="pl">类型:</span>
<span property="v:genre">剧情</span>
/
<span property="v:genre">喜剧</span>
/
<span property="v:genre">爱情</span>
/
<span property="v:genre">战争</span>
<br>

爬取的代码如下:
  1. import requests
  2. from lxml import etree
  3. import time
  4. import csv
  5. import re

  6. headers={
  7.     'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
  8. }
  9. #写入请求头
  10. fp = open('C:\doupoxiaoshuo\doubanshoudong.csv','wt',newline='',encoding='utf-8')
  11. writer= csv.writer(fp)
  12. writer.writerow(('title','leixing','time_out','lanuage'))
  13. #创建CSV文件,写入首行
  14. def get_movie_url(url):
  15.     res=requests.get(url,headers=headers)
  16.     response=etree.HTML(res.text)
  17.     movie_hrefs=response.xpath('//div[@class="hd"]/a/@href')#请求网站信息爬取需要的URL
  18.     for movie_href in movie_hrefs:
  19.         get_movie_info(movie_href)#循环爬取URL
  20. def get_movie_info(url):
  21.     res=requests.get(url,headers=headers)
  22.     response=etree.HTML(res.text)#进入需要爬取的URL页面
  23.     try:
  24.         title=response.xpath('//*[@id="content"]/h1/span[1]/text()')[0]
  25.         leixing=re.findall('<span property="v:genre">(.*?)分钟</span>',res.text)[0]
  26.         time_out=re.findall('<span property="v:runtime" content=".*?">(.*?)分钟</span>',res.text,re.S)[0]
  27.         lanuage=re.findall('<span class="pl">制片国家/地区:</span>(.*?)<br/>',res.text,re.S)[0]
  28.         writer.writerow((title,leixing,time_out,lanuage))
  29. #爬取需要的信息并写入CSV
  30.     except IndexError:
  31.         pass
  32. #出现错误跳过

  33. if __name__ =='__main__':
  34.     urls=['https://movie.douban.com/top250?start={}'.format(str(i))for i in range(0,50,25)]
  35.     for url in urls:
  36.         get_movie_url(url)
  37.         time.sleep(2)
  38. #循环爬取所有电影的详细信息
复制代码
最佳答案
2019-8-22 12:46:58
pl_list = []
pl = response.xpath('//*[@id="info"]/span[@property="v:genre"]')
for i in pl:
        pl_list.append(i.text)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-8-22 12:46:58 | 显示全部楼层    本楼为最佳答案   
pl_list = []
pl = response.xpath('//*[@id="info"]/span[@property="v:genre"]')
for i in pl:
        pl_list.append(i.text)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-22 14:28:01 | 显示全部楼层
彩虹七号 发表于 2019-8-22 12:46
pl_list = []
pl = response.xpath('//*[@id="info"]/span[@property="v:genre"]')
for i in pl:


感谢提供了思路~将获取的数据添加进数组,然后循环添加进数组,实际代码中会因为数组中的数据没有清除在下一个循环继续使用旧数组数据,我再看看应该怎么处理,感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 15:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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