一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 1287|回复: 16
收起左侧

[DataScience] (加大米)Python网络爬虫网页抓取数据问题,求助,在线等!!!

[复制链接] |试试Instant~ |关注本帖
victorsterling 发表于 2015-5-20 10:00:17 | 显示全部楼层 |阅读模式
20小米
本人在使用python的scrapy模块做的网络爬虫去抓取数据,可是想抓取的数据却只能抓出第一行,求各位大神帮忙。

网页源代码:
  1. <div class="main area">
  2.         <div class="lc">. Waral 鍗氬鏈夋洿澶氭枃绔,
  3.                    鏉ユ簮涓浜.涓夊垎鍦拌鍧.
  4.                 <h2>环保动态</h2>.鏈枃鍘熷垱鑷1point3acres璁哄潧
  5.                 <div class="f14list">
  6.                 <ul><li>·<a test=a href='http://gongyi.sohu.com/20150520/n413381073.shtml' target='_blank'>捕捞者为赚钱不择手段:河沟洒农药逼龙虾上岸</a><span> (05/20 05:53)</span><span class='star'>★★★★</span></li><li>·<a test=a href='http://gongyi.sohu.com/20150520/n413381057.shtml' target='_blank'>国宝遭枪杀 云南三县搜寻野生大熊猫</a><span> (05/20 02:17)</span><span class='star'>★★★</span></li><li>·<a test=a href='http://gongyi.sohu.com/20150520/n413381215.shtml' target='_blank'>山西临县发生黄土崩塌事故 9人被埋已救出3人</a><span> (05/20 01:45)</span><span class='star'>★★★★</span></li><li>·<a test=a href='http://gongyi.sohu.com/20150520/n413384310.shtml' target='_blank'>青海省西宁市控噪夜查 一工地被口头警告</a><span> (05/20 01:28)</span><span class='star'>★★★★</span></li><li>·<a test=a href='http://gongyi.sohu.com/20150519/n413381099.shtml' target='_blank'>广西融水山洪灾害续:发现疑似失踪人员遗体</a><span> (05/19 23:38)</span><span class='star'>★★★★</span></li><li>·<a test=a href='http://gongyi.sohu.com/20150519/n413313802.shtml' target='_blank'>网友热议治理工业污染:靠罚款治理只会更贪腐</a><span> (05/19 05:35)</span><span class='star'>★★★★</span></li><li>·<a test=a href='http://gongyi.sohu.com/20150519/n413316762.shtml' target='_blank'>江苏骆马湖非法采砂猖獗 致数十个湖中岛消失</a><span> (05/19 05:01)</span><span class='star'>★★★★</span></li><li>·<a test=a href='http://gongyi.sohu.com/20150519/n413313735.shtml' target='_blank'>江苏63条黑臭河整治未达标 河长名单被集中曝光</a><span> (05/19 03:10)</span><span class='star'>★★★</span></li><li>·<a test=a href='http://gongyi.sohu.com/20150518/n413313917.shtml' target='_blank'>浙江三门回应“生态林被卖”:为合法采矿项目</a><span> (05/18 22:38)</span><span class='star'>★★★★</span></li><li>·<a test=a href='http://gongyi.sohu.com/20150517/n413233079.shtml' target='_blank'>深圳罗湖海关截获走私活信鸽 信鸽被黑丝袜裹住</a><span> (05/17 23:00)</span><span class='star'>★★★</span></li><li> </li><li>·<a test=a href='http://gongyi.sohu.com/20150517/n413233140.shtml' target='_blank'>郑州一小区居民在护栏外挂满垃圾 抗议拖延施工</a><span> (05/17 22:19)</span><span class='star'>★★★★</span></li><li>·<a test=a href='http://gongyi.sohu.com/20150517/n413233105.shtml' target='_blank'>环卫工人凌晨猝死 家属怀疑因工作量太大</a><span> (05/17 14:21)</span><span class='star'>★★★★</span></li><li>·<a test=a href='http://gongyi.sohu.com/20150515/n413092489.shtml' target='_blank'>大熊猫被杀办案民警:村民羊被咬死开枪猎杀</a><span> (05/15 07:56)</span><span class='star'>★★★★</span></li><li>·<a test=a href='http://gongyi.sohu.com/20150515/n413092478.shtml' target='_blank'>北京:垃圾运输车刷车水被曝直排入市政管网</a><span> (05/15 07:56)</span><span class='star'>★★★★</span></li><li>·<a test=a href='http://gongyi.sohu.com/20150515/n413092450.shtml' target='_blank'>颐和园七幅廊头画遭涂鸦 专家建议加设护栏保护</a><span> (05/15 07:55)</span><span class='star'>★★★★</span></li><li>·<a test=a href='http://gongyi.sohu.com/20150515/n413092401.shtml' target='_blank'>云南或存在野生大熊猫栖息地 四川派专家调查</a><span> (05/15 07:55)</span><span class='star'>★★★</span></li><li>·<a test=a href='http://gongyi.sohu.com/20150514/n413014567.shtml' target='_blank'>上游公园放水致下游10亩厂房被淹 损失过百万</a><span> (05/14 07:56)</span><span class='star'>★★★★</span></li><li>·<a test=a href='http://gongyi.sohu.com/20150514/n413012013.shtml' target='_blank'>北京将保护抗战遗迹 或设“日军罪行遗迹”标识</a><span> (05/14 03:20)</span><span class='star'>★★★★</span></li><li>·<a test=a href='http://gongyi.sohu.com/20150514/n413012036.shtml' target='_blank'>上海一女士买套房专门养狗 私家车接送狗狗洗澡</a><span> (05/14 02:14)</span><span class='star'>★★★★</span></li><li>·<a test=a href='http://gongyi.sohu.com/20150514/n413012065.shtml' target='_blank'>仙人球终开5朵花 7旬夫妻养了18年 </a><span> (05/14 02:01)</span><span class='star'>★★★★</span></li><li> </li><li>·<a test=a href='http://gongyi.sohu.com/20150514/n413012103.shtml' target='_blank'>村民因羊被咬死猎杀野生大熊猫 云南官方调查</a><span> (05/14 01:15)</span><span class='star'>★★★</span></li><li>·<a test=a href='http://pic.gongyi.sohu.com/group-655966.shtml' target='_blank'>海洋垃圾影响生态系统:渔网困住海龟 窒息珊瑚</a><span> (05/13 09:25)</span><span class='star'>★★★</span></li><li>·<a test=a href='http://gongyi.sohu.com/20150513/n412933306.shtml' target='_blank'>亿万富翁热爱环保每天上街捡垃圾 义务宣传卫生</a><span> (05/13 04:46)</span><span class='star'>★★★</span></li><li>·<a test=a href='http://gongyi.sohu.com/20150513/n412933358.shtml' target='_blank'>吉林现1800岁红豆杉树 3成年人手牵手方能环抱</a><span> (05/13 02:10)</span><span class='star'>★★★★</span></li><li>·<a test=a href='http://gongyi.sohu.com/20150513/n412933405.shtml' target='_blank'>云南10万亩野生杜鹃林“种”上风车 官方:已停工</a><span> (05/13 00:15)</span><span class='star'>★★★</span></li><li>·<a test=a href='http://gongyi.sohu.com/20150512/n412933343.shtml' target='_blank'>环保部挂牌督办令难执行 违规企业我行我素</a><span> (05/12 10:15)</span><span class='star'>★★★★</span></li><li>·<a test=a href='http://gongyi.sohu.com/20150512/n412874642.shtml' target='_blank'>云南镇雄发生严重洪灾 汽车被冲上墙</a><span> (05/12 06:43)</span><span class='star'>★★★★</span></li><li>·<a test=a href='http://gongyi.sohu.com/20150511/n412874597.shtml' target='_blank'>广西桂林拉响洪水预警 2名村民遭洪水围困</a><span> (05/11 23:35)</span><span class='star'>★★★★</span></li><li>·<a test=a href='http://gongyi.sohu.com/20150511/n412874570.shtml' target='_blank'>气象学家秦大河:本世纪中叶北冰洋将不再有冰</a><span> (05/11 22:08)</span><span class='star'>★★★★</span></li><li>·<a test=a href='http://gongyi.sohu.com/20150511/n412874498.shtml' target='_blank'>环保部发布2015年环境日主题:践行绿色生活</a><span> (05/11 11:19)</span><span class='star'>★★★</span></li><li> </li><li>·<a test=a href='http://gongyi.sohu.com/20150511/n412788938.shtml' target='_blank'>广州公考考题:如何处理市民对PX项目的焦虑</a><span> (05/11 06:07)</span><span class='star'>★★★★</span></li><li>·<a test=a href='http://gongyi.sohu.com/20150511/n412788857.shtml' target='_blank'>北京千米金洞隐藏地下淘金工厂 臭水直排山体</a><span> (05/11 04:44)</span><span class='star'>★★★</span></li><li>·<a test=a href='http://gongyi.sohu.com/20150511/n412788917.shtml' target='_blank'>北京迎64年以来5月最冷天 12.4℃破历史极值</a><span> (05/11 03:57)</span><span class='star'>★★★★</span></li><li>·<a test=a href='http://gongyi.sohu.com/20150510/n412788948.shtml' target='_blank'>四川景区:游客拍到野生大熊猫悠闲散步</a><span> (05/10 09:25)</span><span class='star'>★★★★</span></li><li>·<a test=a href='http://gongyi.sohu.com/20150508/n412658031.shtml' target='_blank'>中学门口绿化带停满自行车 草坪严重被毁</a><span> (05/08 08:58)</span><span class='star'>★★★★</span></li><li>·<a test=a href='http://gongyi.sohu.com/20150508/n412658167.shtml' target='_blank'>承包人污染水库致村民饮水困难引械斗 4死3伤</a><span> (05/08 06:29)</span><span class='star'>★★★★</span></li><li>·<a test=a href='http://gongyi.sohu.com/20150508/n412658262.shtml' target='_blank'>重庆小镇发现虫草 上百村民3天掏空百亩山林</a><span> (05/08 03:01)</span><span class='star'>★★★★</span></li><li>·<a test=a href='http://gongyi.sohu.com/20150508/n412658329.shtml' target='_blank'>河南一村千亩耕地变垃圾场 多数村民要求搬离</a><span> (05/08 00:31)</span><span class='star'>★★★★</span></li><li>·<a test=a href='http://gongyi.sohu.com/20150507/n412566413.shtml' target='_blank'>开发商为讲排场毁绿筑路 铲掉700平米生态廊道</a><span> (05/07 08:35)</span><span class='star'>★★★★</span></li><li>·<a test=a href='http://gongyi.sohu.com/20150507/n412569414.shtml' target='_blank'>腾格里沙漠排污案续 排污企业被罚500万</a><span> (05/07 02:21)</span><span class='star'>★★★★</span></li><li> </li>
  7.        
  8.                 </ul>               
  9.                 </div>
复制代码
结果只能抓取,第一项<li>·<a test=a href='http://gongyi.sohu.com/20150520/n413381073.shtml' target='_blank'>捕捞者为赚钱不择手段:河沟洒农药逼龙虾上岸</a>里面的内容,然后爬虫就结束了,无法抓取后面那些项的内容,求各位大神帮助,好的答案给加大米
for index in table:
item = EnvItem(). 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
item['link'] = index.xpath('li').xpath('a/@href').extract()[0]
估计就是这段代码需要改一下。

.鏈枃鍘熷垱鑷1point3acres璁哄潧

最佳答案

查看完整内容

大致看了一下,貌似你23-26行不太对。 table = response.css('div[class="f14list"]').css('ul')是取出了ul这个结点吧?你XPath的路径应该是到li结点,然后用for循环依次取出li结点,yield。你试一下?
yhfyhf 发表于 2015-5-20 10:00:18 | 显示全部楼层
大致看了一下,貌似你23-26行不太对。

table = response.css('div[class="f14list"]').css('ul')是取出了ul这个结点吧?你XPath的路径应该是到li结点,然后用for循环依次取出li结点,yield。
  1. lis = response.xpath(path/to/li).extract()
  2. for li in lis:
  3.     # extract data
  4.     yield item
复制代码
你试一下?   
-google 1point3acres

评分

1

查看全部评分

回复

使用道具 举报

 楼主| victorsterling 发表于 2015-5-20 10:01:08 | 显示全部楼层
  1. import scrapy
  2. from env.items import EnvItem
  3. from scrapy.http import Request
  4. import requests
  5. import re
  6. from env.city import get_province_city

  7. .1point3acres缃
  8. class SohuSpider(scrapy.Spider): 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
  9.     name = "sohu"
  10.     allowed_domains = ["gongyi.sohu.com"]
  11.     start_urls = (
  12.             'http://gongyi.sohu.com/hbdt/',
  13.             #'http://gongyi.sohu.com/gongyiyw/'
  14.             #'http://gongyi.sohu.com/salon/index.shtml'
  15.             #'http://gongyi.sohu.com/focus/index.shtml'
  16.             #'http://gongyi.sohu.com/gongyicehua/'
  17.     )


  18.     def parse(self, response):
  19.         try:
  20.             table = response.css('div[class="f14list"]').css('ul')
  21.             for index in table:
  22.                 item = EnvItem()
  23.                 item['link'] = index.xpath('li').xpath('a/@href').extract()[0]
  24.                 if not index.xpath('li').xpath('a/text()'):
  25.                         continue. 1point 3acres 璁哄潧
  26.                 item['title'] = index.xpath('li').xpath('a/text()').extract()[0]
  27.                 print item['title']
  28.                 link_info = item['link'].split("/")
  29.                 link_info2 = link_info[-2]
  30.                 item['date'] = link_info2[:4] + '-' + link_info2[4:6] + '-' + link_info2[6:]
  31.                 (province, city) = get_province_city(item["title"])
  32.                 item["province"] = province
  33.                 item["city"] = city
  34.                 . 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷

  35.                 r = requests.get(item["link"])
  36.                 r.encoding=r.apparent_encoding
  37.                 data = r.text
  38.                 link_list = re.findall('<p>(.*?)</p>' ,data)
  39.                 item["content"] = ''
  40.                 if  link_list:
  41.                     item["content"] = ''.join(link_list)
  42.                 else :
  43.                     print 'NONE'
  44.                 yield item. visit 1point3acres.com for more.

  45.         except:
  46.             pass
复制代码
回复

使用道具 举报

 楼主| victorsterling 发表于 2015-5-20 10:01:27 | 显示全部楼层
上面是爬虫的python代码
回复

使用道具 举报

 楼主| victorsterling 发表于 2015-5-20 10:02:43 | 显示全部楼层
网页的那个代码<ul>到</ul>是都在同一行的·····
回复

使用道具 举报

 楼主| victorsterling 发表于 2015-5-20 10:35:35 | 显示全部楼层
yhfyhf 发表于 2015-5-20 10:34
大致看了一下,貌似你23-26行不太对。

table = response.css('div[class="f14list"]').css('ul')是取出 ...
. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
好的,我去试试,感谢大神,一会就来加大米啊
回复

使用道具 举报

 楼主| victorsterling 发表于 2015-5-20 10:42:05 | 显示全部楼层
yhfyhf 发表于 2015-5-20 10:34
大致看了一下,貌似你23-26行不太对。
. 1point 3acres 璁哄潧
table = response.css('div[class="f14list"]').css('ul')是取出 ...
. 鍥磋鎴戜滑@1point 3 acres
使用
  1. lis = response.xpath(path/to/li).extract().鏈枃鍘熷垱鑷1point3acres璁哄潧
  2. for li in lis:
  3.     item['link'] = li.xpath('a/@href').extract()[0]
  4.     #  .....
  5. .1point3acres缃
  6.     yield item
复制代码
之后连第一个提取不出来了呢?是不是我哪里理解的有问题,求解释
回复

使用道具 举报

 楼主| victorsterling 发表于 2015-5-20 10:45:14 | 显示全部楼层
yhfyhf 发表于 2015-5-20 10:34
大致看了一下,貌似你23-26行不太对。

table = response.css('div[class="f14list"]').css('ul')是取出 ...

不用table = response.css('div[class="f14list"]')先确定整个div那块的位置吗???
回复

使用道具 举报

 楼主| victorsterling 发表于 2015-5-20 10:53:05 | 显示全部楼层
yhfyhf 发表于 2015-5-20 10:34
大致看了一下,貌似你23-26行不太对。

table = response.css('div[class="f14list"]').css('ul')是取出 ...

啊,我懂你的意思了,已经修改好了,直接复制是我二了,哈,感谢大神,大米送上!!
回复

使用道具 举报

小K 发表于 2015-5-20 14:41:55 | 显示全部楼层
why not use beautifulsoup?
回复

使用道具 举报

yhfyhf 发表于 2015-5-20 14:55:45 | 显示全部楼层
小K 发表于 2015-5-20 14:41
why not use beautifulsoup?

beautifulsoup写起来太慢了吧,语法总是记不住,感觉比较麻烦。 XPath在chrome里直接可以查。我觉得小项目直接requests+lxml最方便了。如果爬的量大,用scrapy,加多线程,设proxy,pipeline,也很方便。
回复

使用道具 举报

小K 发表于 2015-5-20 15:05:32 | 显示全部楼层
回复

使用道具 举报

yhfyhf 发表于 2015-5-20 15:57:30 | 显示全部楼层
小K 发表于 2015-5-20 15:05
http://www.quora.com/How-do-I-determine-between-using-Beautiful-Soup-or-Scrapy

是的,通常情况下用不着Scrapy,爬几个简单页面没必要用框架。But my point is, 解析HTML时,XPath比BeautifulSoup那套方便太多。所以我觉得lxml>BS,无论是开发效率还是执行效率。
回复

使用道具 举报

 楼主| victorsterling 发表于 2015-5-20 16:48:50 | 显示全部楼层
小K 发表于 2015-5-20 14:41
why not use beautifulsoup?

数据量很大
回复

使用道具 举报

parachutemd 发表于 2015-5-20 22:26:32 | 显示全部楼层
yhfyhf 发表于 2015-5-20 10:00
大致看了一下,貌似你23-26行不太对。
. visit 1point3acres.com for more.
table = response.css('div[class="f14list"]').css('ul')是取出 ...

就是这个地方 不过建议是考虑如果HTML结构变了你的爬虫该怎么写

yhfyhf你是我师弟啊哈哈 比我小了5届
回复

使用道具 举报

yhfyhf 发表于 2015-5-21 00:03:24 | 显示全部楼层
parachutemd 发表于 2015-5-20 22:26
就是这个地方 不过建议是考虑如果HTML结构变了你的爬虫该怎么写
.1point3acres缃
yhfyhf你是我师弟啊哈哈 比我小了5届

学长好!哈哈,大五届Phd都毕业了...

如果HTML结构变了,不是改一下XPath就行了嘛... 还有什么较好的方法吗?
回复

使用道具 举报

yhfyhf 发表于 2015-5-21 00:41:41 | 显示全部楼层
parachutemd 发表于 2015-5-20 22:26
就是这个地方 不过建议是考虑如果HTML结构变了你的爬虫该怎么写

yhfyhf你是我师弟啊哈哈 比我小了5届

原来已经加过学长的Linkedin了...
回复

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-9 00:19

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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