python初学者的第一个爬虫
比较喜欢逛github学习python,看到一个在线的文档,就想着能不能爬一下。用了两个小时的尝试,终于完成了。主要思路是:获取页面源代码,将页面里面的ascii码转为中文,然后将html转换成md格式,并写入文件中。# encoding=utf-8import re
import time
import html2text
import requests
from bs4 import BeautifulSoup
import threading
# 将ascii转化为中文字符
def ascii_to_str(text) -> str:
obj = re.compile(r"&#x(?P<asc>.*?);", re.S)
ret = obj.finditer(resp.text)
new_text = resp.text
for i in ret:
as_code = i.group("asc")
find_sr = r"&#x" + as_code + r";"
string_int = int(as_code, 16)
new_text = new_text.replace(find_sr, chr(string_int))
return new_text
# 写入md文件中
def html_to_md(text, filename) -> None:
with open(filename, 'w', encoding="utf-8") as file:
h = html2text.HTML2Text()
content = h.handle(text)
file.write(content)
# 处理每个章节页面
def one_page_deal(url_name, header, file_name) -> None:
resp1 = requests.get(url_name, headers=header)
bs = BeautifulSoup(resp1.text, "html.parser")
# 过滤掉目录
ret1 = bs.find_all("ul", attrs={"class": "summary"})
for i_index in ret1:
i_index.decompose()
# 过滤掉多余的字符
ret2 = bs.find_all("div", attrs={"class": "search-results"})
for j in ret2:
j.decompose()
html_to_md(str(bs), file_name)
url = "https://taizilongxu.gitbooks.io/stackoverflow-about-python/content/"
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 "
"Safari/537.36 Edg/122.0.0.0"
}
resp = requests.get(url, headers=header)
# 找title作为文件的名字
page = BeautifulSoup(resp.text, "html.parser")
title_name = page.find("title")
file_name = title_name.text.replace(" ", "_") + ".md"
new_string = ascii_to_str(resp.text)
html_to_md(new_string, file_name)
# 找出每个章节的页面地址
chapter = []
ret = page.find_all("li", attrs={"class": "chapter"})
index = 0
for i in ret:
if index == 0:
index += 1
continue
url_name = url + i.get("data-path")
chapter.append(url_name)
# 多线程操作
threads = []
for i in chapter:
file_name = str(index) + ".md"
t = threading.Thread(target=one_page_deal, args=(i, header, file_name))
t.start()
threads.append(t)
index += 1
time.sleep(1)
for i in threads:
i.join()
WvRt 发表于 2024-3-24 18:58
卧槽大佬学多久了,我学了两个月还不会爬
跟着B站上面的视频一边学以便敲代码,自己来做项目,一个月你到达的地步都不止楼主这点的,加油 Goldenrich 发表于 2024-3-24 21:08
&#x 这几个字符是什么意思,求解?
文心一言:这段代码是在Python中创建一个正则表达式模式,用于查找特定的字符串。
find_sr = r"&#x" + as_code + r";"
这里:
r 前缀表示这是一个原始字符串,这样Python就不会对反斜杠 \ 进行特殊处理。
&#x 和 ; 是HTML实体的一部分,通常用于表示特殊字符或Unicode字符。
as_code 是一个变量,它应该包含某个字符的Unicode十六进制编码。
整个正则表达式 find_sr 的目的是找到形如 &#xXXXX; 的HTML实体,其中 XXXX 是由 as_code 变量提供的十六进制编码。 卧槽大佬学多久了,我学了两个月还不会爬{:1_911:} 感谢楼主 WvRt 发表于 2024-3-24 18:58
卧槽大佬学多久了,我学了两个月还不会爬
我这爬的应该是最基础的,高级的我也不会。你可以在b站上找个爬虫的视频看看,一定要自己动手写代码,不会的就谷歌。 得先打好基础在实操 厉害,也想学,怕学不会。 要想学高级还得逆向分析和js WvRt 发表于 2024-3-24 18:58
卧槽大佬学多久了,我学了两个月还不会爬
两个月?我觉得有人带1小时都不要 贴吧之类的可以练练手