最近在学python爬虫 写了一个爬小说的代码(直接上代码)
首先是获取网页的url
import ssl
import re
import requests
ssl._create_default_https_context = ssl._create_unverified_context
url = 'http://www.biquge5200.cc/75_75597/'
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh;'
' Intel Mac OS X 10_13_4)'
' AppleWebKit/537.36 (KHTML,'
' like Gecko) Chrome/68.0.3440.106'
' Safari/537.36'}
proxies = {'http': '219.141.153.41:80'}
file_path = '/Users/cardistry_lee/Desktop/'
request = requests.get(url, headers=headers, proxies=proxies)
if request.status_code == 200:
print(request)
html = request.content.decode('gbk')
reg = re.findall(r'https://.*?\.html', str(html))
然后再是解析获取到的url
import get_xiaoshuo_url as x
from bs4 import BeautifulSoup
import os
import time
import tqdm
def parse_url():
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; WOW64)'
' AppleWebKit/537.36 (KHTML, like Gecko)'
' Chrome/27.0.1453.94 Safari/537.36'}
proxies = {'http': '61.135.217.7:80'}
file_path = '/Users/cardistry_lee/Desktop/fhdaskfasdk/'
p = 0
for j in x.reg:
url = j
request = x.requests.get(url, headers=headers, proxies=proxies)
html = request.content.decode('gbk')
soup = BeautifulSoup(html, 'lxml')
title = soup.title.string
content = soup.find_all('p')
if not os.path.exists(file_path):
os.mkdir(file_path)
os.chdir(file_path)
with open(file_path + ('%s_%d.txt' % (title, p)), 'w', encoding='utf8') as f:
print('正在下载:' + str(title))
for k in tqdm.trange(100):
time.sleep(0.01)
for i in content:
f.write(str(i.string) + '\r\n')
p += 1
最后定义一个main.py来执行
import parse_url
def main():
parse_url.parse_url()
if __name__ == '__main__':
main()
因为是初入爬虫,所以可能代码不是太完善,希望有大佬看到了,可以指点一下QAQ
现在来说一下写这个代码时候的思路吧!
我在写这个代码的时候,首先想的是获取要爬的url
但是中途遇到了一个难点,那就是获取到url之后发现自己不会处理这种多个url的情况,
之前都是看各种urllib, requests这些库的使用方法,然后再自己动手去实现一下,都爬的是单个的url(果然还是技术不行,哇咔咔咔).
但今天不知怎么的,就想到了如果一个文件搞不定就多写几个文件,然后再创建一个main来当程序的入口,可能开窍了吧-_-
然后获取到url之后,我是用的BeautifulSoup来解析的,其他的也不会用,听说貌似还有pyquery什么的,毕竟刚入爬虫的门嘛.
然后我再写完代码之后突发奇想,当我在运行代码的时候网络不好,或者其他原因需要等待很长时间时,就会感觉很无聊,于是搜了一下在下载时,显示进度条的方法,然后就装了一下tqdm,再把tqdm加到了代码里,然后再次运行起来的时候就发现和谐多了QAQ~~
以上就是大概的一些思路(没话说了,emmmmm)