Python-18:多线程扒取百度贴吧帖子内容源码

源码中附注释,直接放源码哈。

#-*-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‘)

‘‘‘重新运行之前请删除content.txt,因为文件操作使用追加方式,会导致内容太多。‘‘‘

#该方法是向文件中写入以下格式的内容
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‘)
_header={‘User-Agent‘:‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36‘}
#根据给定的URL扒取内容的方法
def spider(url):
    html = requests.get(url,headers=_header)
    print 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:
        ‘‘‘
        data-field="
        {"
        author":{
            "user_id":830583117,
            "user_name":"huluxiao855",
            "name_u":"huluxiao855&ie=utf-8",
            "user_sex":0,
            "portrait":"4db168756c757869616f3835358131",
            "is_like":1,
            "level_id":4,
            "level_name":"\u719f\u6089\u82f9\u679c",
            "cur_score":31,
            "bawu":0,
            "props":null},
        "content":{
            "post_id":62881461599,
            "is_anonym":false,
            "open_id":"tbclient",
            "open_type":"apple",
            "date":"2015-01-11 22:09",
            "vote_crypt":"",
            "post_no":203,
            "type":"0",
            "comment_num":1,
            "ptype":"0",
            "is_saveface":false,
            "props":null,
            "post_index":0,
            "pb_tpoint":null
            }
        }"

        ‘‘‘
        reply_info = json.loads(each.xpath(‘@data-field‘)[0].replace(‘&quot‘,‘‘))
        #reply_info是一个字典,根据上面注释所述的结构关系,这样来获取做着
        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 "]/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)
    ‘‘‘
    如果我们是直接执行某个.py文件的时候,该文件中那么”__name__ == ‘__main__‘“是True,
    但是我们如果从另外一个.py文件通过import导入该文件的时候,这时__name__的值就是我们这个py文件的名字而不是__main__。
    这个功能还有一个用处:
    调试代码的时候,在”if __name__ == ‘__main__‘“中加入一些我们的调试代码,我们可以让外部模块调用的时候不执行我们的调试代码,
    但是如果我们想排查问题的时候,直接执行该模块文件,调试代码能够正常运行!
    ‘‘‘
if __name__ == ‘__main__‘:
    #创建一个4核的应用程序池
    pool = ThreadPool(4)
    #第二个参数a代表的意思是向文件中追加
    f = open(‘content.txt‘,‘a‘)
    #定义一个保存网址url的数组
    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()
时间: 2024-10-12 13:08:40

Python-18:多线程扒取百度贴吧帖子内容源码的相关文章

爬虫抓取百度贴吧帖子内容

上篇文章已经介绍了抓取糗事百科的段子,这篇文章来抓取百度贴吧帖子内容,涉及到urllib,urllib2,re等模块. 代码实现功能: 1.获取某一个帖子的标题 2.获取帖子回复的所有页数,以及每一页的内容 3.可以只获取楼主的回复(使用数字1声明),或者所有回复(使用数字0声明) 直接使用oop编程的方式编写代码: 代码如下: #!/usr/bin/env python #coding:utf8 import urllib import urllib2 import re #处理页面标签类 c

Python爬虫实战二之爬取百度贴吧帖子

大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 前言 亲爱的们,教程比较旧了,百度贴吧页面可能改版,可能代码不好使,八成是正则表达式那儿匹配不到了,请更改一下正则,当然最主要的还是帮助大家理解思路. 2016/12/2 本篇目标 1.对百度贴吧的任意帖子进行抓取 2.指定是否只抓取楼主发帖内容 3.将抓取到的内容分析并保存到文件 1.URL格式的确定 首先,我们先观察一下百度贴吧的任意一个帖子. 比如:ht

转 Python爬虫实战二之爬取百度贴吧帖子

静觅 » Python爬虫实战二之爬取百度贴吧帖子 大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 1.对百度贴吧的任意帖子进行抓取 2.指定是否只抓取楼主发帖内容 3.将抓取到的内容分析并保存到文件

【python学习】网络爬虫——爬百度贴吧帖子内容

很久以前,很喜欢泡贴吧,因为那里有自己牵挂的人和事 一转眼过去好多年了...... 一个简单的学习爬虫的例子,爬百度贴吧帖子内容 代码如下: # -*- coding:utf-8 -*- #import urllib import urllib2 import re #功能性类,过滤掉html标签的类 class Tool:     #去除img标签,7位长空格     removeImg = re.compile('<img.*?>| {7}|')     #删除超链接标签     remo

多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例

前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面大致的了解了Thread的一些方法和属性下面对一些方法进行运用看看具体效果<下面可能还是会贴很多的源代码,其实我是拒绝的,我只想贴每个方法的代码,但是有时候看到一个方法里面有调用了方法,但是笔者有没有给出来,很蛋疼,有种爽到一半的感觉,所以我还是会把它贴出来,希望一次就能挖到底,不论有没有全懂,但至

Android多线程研究(1)——线程基础及源码剖析

从今天起我们来看一下Android中的多线程的知识,Android入门容易,但是要完成一个完善的产品却不容易,让我们从线程开始一步步深入Android内部. 一.线程基础回顾 package com.maso.test; public class TraditionalThread { public static void main(String[] args) { /* * 线程的第一种创建方式 */ Thread thread1 = new Thread(){ @Override publi

多线程爬取百度百科

前言:EVERNOTE里的一篇笔记,我用了三个博客才学完...真的很菜...百度百科和故事网并没有太过不一样,修改下编码,debug下,就可以爬下来了,不过应该是我爬的东西太初级了,而且我爬到3000多条链接时,好像被拒绝了...爬取速度也很慢,估计之后要接触一些优化或者多进程,毕竟python是假的多线程.本博客参照代码及PROJECT来源:http://kexue.fm/archives/4385/ 源代码: 1 #! -*- coding:utf-8 -*- 2 import reques

百度图片爬虫-python版-如何爬取百度图片?

上一篇我写了如何爬取百度网盘的爬虫,在这里还是重温一下,把链接附上: http://5912119.blog.51cto.com/5902119/1771391 这一篇我想写写如何爬取百度图片的爬虫,这个爬虫也是:搜搜gif(在线制作功能点我) 的爬虫代码,其实爬虫整体框架还是差不多的,但就是会涉及到图片的的一些处理,还是花费了我不少时间的,所以我请阅读的本爬虫的孩子还是认真一些,毕竟程序猿都不容易啊.好的,我也不想多说,爬虫的代码我会分享到去转盘网,想下载本爬虫代码的孩子请点我下载,如果没有下

python 利用selenium爬取百度文库的word文章

今天学习如何使用selenium库来爬取百度文库里面的收费的word文档 from selenium import webdriver from selenium.webdriver.common.keys import Keys from pyquery import PyQuery as pq from selenium.webdriver.support.ui import WebDriverWait from selenium import webdriver import time o