老师好。我已经根据贴吧的源码做出相应的修改了,但context还是空

wx_9w85nq6g XPath 与多线程爬虫 最后由 jike_5108530 于2017年03月09日回复

  • 5 回答
  • 1.4k 浏览
#-*-coding:utf8-*-

from lxml import etree
from multiprocessing.dummy import Pool as ThreadPool
import requests
import json
import sys

reload(sys)

sys.setdefaultencoding('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'] + 'nn')

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 = each.xpath('div[@class="d_post_content_main"]/div/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/4705374250?pn=' + str(i)
page.append(newpage)
print u'正在处理页面:' + newpage

results = pool.map(spider, page)
pool.close()
pool.join()
f.close()

  • 上海小胖 2016年08月26日 回答 #1楼
  • 同学你好。

    请注意,你的python tab缩进要确保正确哦。

    比如:

    if __name__ == '__main__':
    pool = ThreadPool(4)
    f = open('content.txt','a')
    page = []
    for i in range(1,21):
    newpage = 'http://tieba.baidu.com/p/4705374250?pn=' + str(i)
    page.append(newpage)

    这个for据我理解应该是在if里面的,但是你这样子的缩进就变成了 for和 main函数没有关系了。

    同理上面的函数中也是一样的。

  • 0 评论
  • wx_9w85nq6g 2016年08月26日 回答 #2楼
  • 好像有些文字没上传上去。。。

    我删掉content也没用

    item = {}
    这里做断点结果如下

    捕获.PNG不知道是改的还是不对或者有其他的问题

  • 0 评论
  • qq_903zl4bn 2016年09月08日 回答 #4楼
  • 百度调整过样式了,我也改过编码,文本始终获取不到内容,于是使用了BeautifulSoup,立马能获取文本了,只是进程间好像会打架,偶尔报错,没法获取全部内容

  • 0 评论