BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / python / #12402同步于 2016/2/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖

[问题]经管学弟请教各大神

wangxiaode
2016/2/24镜像同步8 回复
这个假期新学的python,仿照视频自己大概弄了一个爬虫的程序,抓取贴吧20页的发帖人名称内容和时间,代码如下: #coding=utf-8 from lxml import etree from multiprocessing.dummy import Pool as ThreadPool import requests import json import sys reload(sys) sys.setdefaultencoding('utf-8') #以上三行为了把抓取的数据转换成utf-8的格式,方便存储 def towrite(contentdict): f.writelines(u'回帖时间:' + str(contentdict['topic_reply_time']) + '\n') f.writelines(u'回帖内容:' + unicode(contentdict['topic_reply_content']) + '\n') f.writelines(u'回帖人:' + contentdict['user_name'] + '\n\n') def spider(url): html = requests.get(url) selector = etree.HTML(html.text) content_field = selector.xpath('//div[@class="l_post j_l_post l_post_bright "]') item = {} for each in content_field: reply_info = json.loads(each.xpath('@data-field')[0].replace('&quot','')) author = reply_info['author']['user_name'] content = json.loads(each.xpath('div[@class="d_post_content_main"]/div[@class="p_content p_content_icon_rowl p_content_nameplate"]/cc/div[@class="d_post_content j_d_post_content clearfix"]/text()')[0]) reply_time = reply_info['content']['date'] print(content) print(reply_time) print(author) item['user_name'] = author item['topic_reply_content'] = content item['topic_reply_time'] = reply_time towrite(item) if __name__ == '__main__': pool = ThreadPool(4) f = open('content.txt','a') page = [] for i in range(1,21): newpage = 'http://tieba.baidu.com/p/3522395718?pn=' + str(i) page.append(newpage) results = pool.map(spider,page) pool.close() pool.join() f.close() 现在如果运行整个代码就会报错,感觉是25,26,27这三行出了问题,错误如下图所示 [upload=3][/upload] 如果注释掉14,25,27,31也就说不爬取内容相关的数据,那么程序就可以运行,不过是从第7页网页开始抓数据。 就这两个问题,求各位大神帮忙解答~
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
dizzygym机器人#1 · 2016/2/24
帮顶 【 在 wangxiaode 的大作中提到: 】 这个假期新学的python,仿照视频自己大概弄了一个爬...
wugh机器人#2 · 2016/2/24
为什么不贴源代码呢?贴个图别人要调试还得把你的代码敲一遍,论坛可以贴代码的 【 在 wangxiaode 的大作中提到: 】 : 这个假期新学的python,仿照视频自己大概弄了一个爬虫的程序,抓取贴吧20页的发帖人名称内容和时间,代码如下两图所示(其中25,26,27原本是一行的代码,为了截图方便弄成了三行,) : [upload=1][/upload][upload=2][/upload] : 现在如果运行整个代码就会报错,感觉是25,26,27这三行出了问题,错误如下图所示 : ...................
nuanyangyang机器人#3 · 2016/2/24
先换成Python3再说。
asif12机器人#4 · 2016/2/24
那估计是这里,如果什么都没找到,应该是空列表。
wangxiaode机器人#5 · 2016/2/24
【 在 wugh 的大作中提到: 】 : 为什么不贴源代码呢?贴个图别人要调试还得把你的代码敲一遍,论坛可以贴代码的 啊。。我忘记了,现在已经改完了~
wangxiaode机器人#6 · 2016/2/24
谢啦谢啦~ 【 在 dizzygym 的大作中提到: 】 : 帮顶 : 这个假期新学的python,仿照视频自己大概弄了一个爬...
wangxiaode机器人#7 · 2016/2/24
【 在 asif12 的大作中提到: 】 : 那估计是这里,如果什么都没找到,应该是空列表。 这个我看了,查询的地址应该是没错啊,不知道为什么列表中一直都是空的,而且也不知道为啥从第七页开始抓。
iamluo机器人#8 · 2016/2/26
试了下用beautifulsoup爬取内容相关的数据,可以爬到。至于为什么看到打印是从第7页开始,是由于使用了多线程,爬取每个网页所需时间不同,打印出来就会乱序。仅供楼主参考~ def ano_spider(url='http://tieba.baidu.com/p/3522395718?pn=3'): html = requests.get(url) soup = BeautifulSoup(html.text) contents = soup.find_all(class_="d_post_content j_d_post_content clearfix") for each in contents: #爬取的网页中,有些unicode字符是无法转换为gbk的,需要添加ignore print((each.get_text()).encode('gbk','ignore')) 【 在 wangxiaode 的大作中提到: 】 : 这个假期新学的python,仿照视频自己大概弄了一个爬虫的程序,抓取贴吧20页的发帖人名称内容和时间,代码如下: : #coding=utf-8 : from lxml import etree : ...................