python之爬取⽹页数据总结(⼀)
今天尝试使⽤python,爬取⽹页数据。因为python是新安装好的,所以要正常运⾏爬取数据的代码需要提前安装插件。分别为requests Beautifulsoup4 lxml 三个插件。
因为配置了环境变量,可以cmd命令直接安装。假如电脑上有两个版本的python,建议进⼊到⽬录安装。
安装的命令为 pip install requests(Beautifulsoup4 /lxml )三条分别执⾏。
安装结束,可以尝试⽹上⼀些简单的例⼦,明⽩了解 Beautifulsoup4 解析⽹页所使⽤的⽅式。这个可以避开正则表达式,个⼈感觉学起来很⽅便。
soup.select('') 这个⽅法就是解析⽹页代码,提取其中某⼀部分。该⽅法的使⽤可以类⽐java 爬⾍的webmagic jsoupXpath-0.1.1.jar 的使⽤⽅法。
主要理解这个⽅法之后就可以看懂⼤部分代码。
以下为⽹上的例⼦代码,⽐较简单,适合学习。
import requests
from bs4 import BeautifulSoup
def getHTMLText(url):
try:
r = (url, timeout = 30)
r.raise_for_status()
#r.encoding = 'utf-8'
except:
return ""
def getContent(url):
html = getHTMLText(url)
# print(html)
soup = BeautifulSoup(html, "html.parser")
title = soup.select("div.hd > h1")
print(title[0].get_text())
time = soup.select("div.a_Info > span.a_time")
print(time[0].string)
author = soup.select("div.qq_articleFt > div.qq_toolWrap > div.qq_editor")
print(author[0].get_text())
paras = soup.select("div.Cnt-Main-Article-QQ > p.text")
for para in paras:
if len(para) > 0:
_text())
print()
writelines()方法将什么写入文件#写⼊⽂件
fo = open("", "w+")
fo.writelines(title[0].get_text() + "\n")
fo.writelines(time[0].get_text() + "\n")
for para in paras:
if len(para) > 0:
fo._text() + "\n\n")
fo.writelines(author[0].get_text() + '\n')
fo.close()
#将爬取到的⽂章⽤字典格式来存
article = {
'Title' : title[0].get_text(),
'Time' : time[0].get_text(),
'Paragraph' : paras,
'Author' : author[0].get_text()
}
print(article)
def main():
url = "news.qq/a/20170504/012032.htm"
getContent(url);
main()
掌握基本的爬取数据之后,便尝爬取取⼤量数据。经过多次尝试发现,⾸先需要准备多个ip,同⼀个ip多次访问长时间会导致结果全部为空。
其次是多线程,为的是增加速度。python中多线程⽹上⼤多使⽤的是pool
使⽤
if __name__ == '__main__':#需加上这句代码,这时是⼀种固定的写法
# pool()有⼀个参数,processes,表⽰有多少个进程,⽐如processes=2
pool = ThreadPool() //⽹上⼤部分使⽤的是pool=Pool(),但是经过多次尝试总是失败,然后改成了这样的。
pool.map(get_all_list_info,urlStr) //两个参数,第⼀个为调⽤的⽅法,该⽅法有参数,但是后边不写形参,map的第⼆个参数为⼀个迭代器,就是集合形式,会按顺序取其中的数据,作为参数传递给⽅法。 pool.close()
pool.join()
掌握这些,基本可以实现⼤量数据爬取。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论