返回信息流这个假期新学的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('"',''))
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页网页开始抓数据。
就这两个问题,求各位大神帮忙解答~
这是一条镜像帖。来源:北邮人论坛 / python / #12402同步于 2016/2/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
[问题]经管学弟请教各大神
wangxiaode
2016/2/24镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
为什么不贴源代码呢?贴个图别人要调试还得把你的代码敲一遍,论坛可以贴代码的
【 在 wangxiaode 的大作中提到: 】
: 这个假期新学的python,仿照视频自己大概弄了一个爬虫的程序,抓取贴吧20页的发帖人名称内容和时间,代码如下两图所示(其中25,26,27原本是一行的代码,为了截图方便弄成了三行,)
: [upload=1][/upload][upload=2][/upload]
: 现在如果运行整个代码就会报错,感觉是25,26,27这三行出了问题,错误如下图所示
: ...................
【 在 wugh 的大作中提到: 】
: 为什么不贴源代码呢?贴个图别人要调试还得把你的代码敲一遍,论坛可以贴代码的
啊。。我忘记了,现在已经改完了~
【 在 asif12 的大作中提到: 】
: 那估计是这里,如果什么都没找到,应该是空列表。
这个我看了,查询的地址应该是没错啊,不知道为什么列表中一直都是空的,而且也不知道为啥从第七页开始抓。
试了下用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
: ...................