当前位置:   article > 正文

python爬网页数据-python之爬取网页数据总结(一)

爬取网页数据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 = requests.get(url, timeout = 30)

r.raise_for_status()

#r.encoding = "utf-8"

return r.text

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:

print(para.get_text())

print()

#写入文件

fo = open("text.txt", "w+")

fo.writelines(title[0].get_text() + " ")

fo.writelines(time[0].get_text() + " ")

for para in paras:

if len(para) > 0:

fo.writelines(para.get_text() + " ")

fo.writelines(author[0].get_text() + " ")

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 = "http://news.qq.com/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()

掌握这些,基本可以实现大量数据爬取。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/1000869
推荐阅读
相关标签
  

闽ICP备14008679号