针对百家号抓取项目
闲聊
放假的时候接到了一个抓取百度百家号的项目,由于种种原因没有完成。由于我的能力不够真的好尴尬。我的第一个项目就这样黄了。不过技术不行我可以学啊(嘿嘿嘿)
先说一下项目是怎么样的好le
项目思路
一
就是先解决比如http://baijiahao.baidu.com/u?app_id=1551032544962326这个链接里面的所有文章的标题链接阅读数和评论数。我们可以观察到这个网站是动态加载的你可以一直的往下翻一直到没有这个就是典型的XHR的加载手机版的淘宝也是这样弄得。xhr涉及了比较多的网页端的知识我了解的也不多。现在也只是会通过python发出XHR的请求然后获取我们想要的东西。这个就是一个模拟请求代码就是几行不用怎么说。
二
是获取那些百家号的id这个比较困难了因为他的id有16位暴力是不可能的。从别的地方也获取不到当时就是一阵懵逼。当我看到百度的时候。我才想到他们帮我们都弄好了嘿嘿谢谢百度的爬虫哈哈。当然我们的问题从爬百家号变成了爬百度搜索了。我的难题又来了百度搜索也不是我能够很轻松搞定的他的搜索结果不能够直接得到这就尴尬了。我开始是通过PHANTOMJS的这个的效率太低了我服务器cpu都跑满了一天也获得不到几个。最后我还是改变自己的思路了我可以不一次获得百度结果的760个所有结果每一次就获取一页通过不同的关键词来获取这样的话一切问题都变得简单了只要向百度发起get请求就可以了嘿嘿
贴出我的代码
bajihao.py
'''本模块是为了解决获取百家号url并且从这个url里面获取我们想要的新闻'''
import re
import time
import bs4
import requests
from selenium import webdriver
class sobaidu():
'''sobaidu类实现通过百度搜索获取真实的url并且把url写入数据库'''
def __init__(self):
self.KEYFILENAME = "keylist.txt"
self.URLFILENAME = "urllist.txt"
self.KEYLIST = set()
self.URLLIST = set()
self.URLFILE = open(self.URLFILENAME, 'w')
def _readkey(self):
'''读取百度搜索所需要的所有关键词'''
with open(self.KEYFILENAME) as keyklistfile:
for i in keyklistfile.readlines():
self.KEYLIST.add(i)
def _changeurl(self, url):
'''百度搜索结果url转换为真实的url'''
try:
req = requests.get(url+'&wd=')
# time.sleep(1)
# print(req.text)
regx = r'http[s]*://baijiahao.baidu.com/[\S]*id=[0-9]*'
pattern = re.compile(regx)
match = re.findall(pattern, req.text)
return match[0]
except Exception as e:
print(e)
def _wri