这几天看了csdn学院的免费直播课程,简单了解了网络爬虫主要的部分和思路,对这块空缺的知识的填补和入门提供了很大的帮助,在这里记录一下整个爬虫的代码
#encoding:utf-8
import requests
from bs4 import BeautifulSoup
import os
from urllib import request
import threading
gLock = threading.Lock() #针对多线程定义一把锁
PAGE_URLS=[] #存储网页
IMAGE_URLS=[] #存储图片链接
#访问者
#通过chrome浏览器,右键网页'检查',选择 Network 项,刷新网页后来获取元素的User-Agent
headers = {'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Mobile Safari/537.36'}
#爬取图片链接
def producter():
global headers
while True:
if len(PAGE_URLS)==0:
break
gLock.acquire()
page_url=PAGE_URLS.pop()
gLock.release()
response = requests.get(page_url, headers=headers)
text = response.text
soup = BeautifulSoup(text, 'lxml')
#找出网站图片元素对应的 class 名称
img_list = soup.find_all("img", attrs={"class": "lazy image_dtb img-responsive"})
for img in img_list:
img_url = img['data-original']
IMAGE_URLS.append(img_url)
#下载图片
def consumer():
while True:
if len(IMAGE_URLS)==0 and len(PAGE_URLS)==0:
break
gLock.acquire()
if len(IMAGE_URLS)>0:
img_url = IMAGE_URLS.pop()
filename = img_url.strip().split('/')[-1]
fullpath = os.path.join('url_img', filename)
request.urlretrieve(img_url, fullpath) #下载
print('%s下载完成' % filename)
gLock.release()
def main():
#保存9页的网址
for x in range(1,10):
page_url = "http://www.doutula.com/article/list/?page=1"+str(x)
PAGE_URLS.append(page_url)
#创建5个生产者
for i in range(5):
th = threading.Thread(target=producter)
th.start()
#创建5个消费者
for i in range(5):
th = threading.Thread(target=consumer)
th.start()
if __name__ == '__main__':
main()
作者通过观看优快云学院免费直播课程,初步了解网络爬虫主要部分与思路,填补了相关知识空缺。作者将记录整个爬虫代码,以巩固入门学习成果。
2493

被折叠的 条评论
为什么被折叠?



