一次微信公众号爬虫

这里给大家分享一下最近做微信公众号文章爬虫的经历,其中肯定有许多不好的地方,希望大家斧正交流。

相信大家最近做微信公众号爬虫肯定遇到了很多的问题,其中最大的就是网上很多方法已经不能用了,比如搜狗微信网页端都不能用了,不得不感慨小龙大佬在这方面还是控制的很严的。毕竟现在数据这么值钱,哪能随便就被你爬了去。但是方法还是有的,下面是我这个程序的目录:注意你得先创建一个python的package,因为里面的调度器需要访问这package中的其他py文件

出去里面的picture.py文件,剩下的就是这个爬虫项目的主要结构了:

DataOutput.py:用来将爬取的数据永久化,与数据库有关

HtmlDownloader.py:用来下载页面文档的,你要爬数据最基本就是在文档中用各种正则表达式啊,lxml,html.parser等等各种解析HTML文档的工具。通常静态页面用requests来下载,动态页面的话可以用selenium中的webdriver

HtmlParser:是爬虫中着重需要处理的功能,也就是页面解析,我们需要根据自己的需要来进行解析

UrlManageer.py:用来对URL进行存储,去重,不断给出新的URL用于下一轮爬取,但在这里用处不大

SpiderController:爬虫调度器,用于爬虫开始运行的初始化,启动爬虫

 

下面开始讲细节:UrlManager.py

"""url管理器"""
class UrlManager:
    def __init__(self):
        self.new_urls=set()
        self.old_urls=set()
    def has_new_url(self):
        return self.new_url_size()!=0
    def get_new_url(self):
        new_url=self.new_urls.pop()
        self.old_urls.add(new_url)
        return new_url
    def add_new_url(self,url):
        if url is None:
            return
        if url not in self.new_urls and url not in self.old_urls:
            self.new_urls.add(url)
    def add_new_urls(self,urls):
        if urls is None or len(urls)==0:
            return
        for url in urls:
            self.add_new_url(url)
    def new_url_size(self):
        return len(self.new_urls)
    def old_url_size(self):
        return len(self.old_urls)

HtmlDownloader.py:要补充一点,静态页面不等于静态内容,我们要获取的东西如果是通过JavaScript什么的动态生成的话,就需要用到这里的浏览器引擎来进行爬取了。

"""下载器"""
#import requests
#from urllib3 import disable_warnings
from selenium import webdriver
#from bs4 import BeautifulSoup
class HtmlDownloader:
    def download(self,url):
        if url is None:
            return None
        #headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)         AppleWebKit/537.36 (KHTML, lke Geicko) Chrome/70.0.3538.77 Safari/537.36'}
        #headers={'User-Agent':user_agent}在获取静态内容的时候要给requests对象加上请求头
        browser = webdriver.Chrome(r'E:\chromedriver\chromedriver.exe')
        #r=requests.get(url,headers=head
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值