Rastreo de CSDN
python + selenium + parsel + tomd
Tansty creado
Dirección de código:
github
gitee
## Uno, conocimientos necesarios *** 1.Conocimientos básicos del módulo analizador ***
(1) Los selectores de CSS
deben crear un objeto
de selección de parsel. De selección de parsel import Selector
html, que puede ser el código fuente de una solicitud de página web, o html,
selector de cadena = Selector (html) en formato xml,
después de crear el objeto Selector comience a usar el CSS
tags = selector.css ('. content') que
usamos habitualmente, se modificará cuando una etiqueta en particular, use .class_attr
aquí, también
.content hace referencia a todas las consultas etiqueta de clase para el contenido de la
consulta El resultado de es un objeto especial y los datos requeridos no se pueden obtener directamente.
Para convertir el resultado de la consulta de la función css () en una cadena o una lista, se necesita una función
• get ()
• getall ()
(2) Extracción de atributos
href_value = selector.css('a::attr(href)').get() #提取href标签的值
title=page.css(".title-article::text").get() #提取文本内容
2.
El método de selenio para seleccionar elementos
find_element_by_class_name: ubicar según la clase
find_element_by_css_selector: Según el posicionamiento css
find_element_by_id: ubicar según id
find_element_by_link_text: ubica según el texto del enlace
find_element_by_name: ubicar según el nombre del nodo
find_element_by_partial_link_text: ubica según el texto del enlace, siempre que esté incluido en el texto completo
find_element_by_tag_name: localizar por etiqueta
find_element_by_xpath: Utilice Xpath para localizar
PD: Cambiar elemento a elementos ubicará todos los elementos elegibles y devolverá una Lista
比如 : find_elements_by_class_name
Lo que se devuelve es el objeto web_element
3.tomd
text = tomd.Tomd (contenido) .markdown
convierte el artículo obtenido en forma de rebaja
Dos, pantalla de código
1. Obtenga un artículo
#对一篇文章的爬取
def spider_one_csdn(title_url): # 目标文章的链接
html=requests.get(url=title_url,headers=head).text
page=parsel.Selector(html)
#创建解释器
title=page.css(".title-article::text").get()
title=filter_str(title)
print(title)
content=page.css("article").get()
content=re.sub("<a.*?a>","",content)
content = re.sub("<br>", "", content)
#过滤a标签和br标签
text=tomd.Tomd(content).markdown
#转换为markdown 文件
path = os.getcwd() # 获取当前的目录路径
file_name = "./passage"
final_road = path + file_name
try:
os.mkdir(final_road)
print('创建成功!')
except:
# print('目录已经存在或异常')
pass
with open(final_road+r"./"+title+".md",mode="w",encoding="utf-8") as f:
f.write("#"+title)
f.write(text)
time.sleep(1)
2. Obtenga todos los artículos de blogueros
def get_article_link(user):
#获取某个博主的所有文章
page=1
while True:
link = "https://blog.csdn.net/{}/article/list/{}".format(user, page)
print("现在爬取第", page, "页")
html = requests.get(url=link, headers=head).text
cel = parsel.Selector(html)
name_link = cel.css(".article-list h4 a::attr(href) ").getall()
if not name_link:
break
#没有文章就退出
for name in name_link:
spider_one_csdn(name)
page+=1
time.sleep(1)
3. Obtenga el nombre del bloguero
def nb_bozhu():
#获取前十博主的csdn名称
driver=webdriver.Chrome()
driver.implicitly_wait(10)
driver.get("https://blog.csdn.net/rank/writing_rank")
names=driver.find_elements_by_xpath("//div[@class='rank-item-box d-flex align-items-center']//div[@class='name d-flex align-items-center']/h2/a")
name_list=[]
for name in names:
final_name=name.get_attribute("outerHTML")
final_name=re.sub('<a href="https://blog.csdn.net/',"",final_name)
final_name=re.sub('">.*</a>','',final_name)
name_list.append(final_name)
print(final_name)
driver.quit()
time.sleep(1)
return name_list
Después de la ejecución final, se generará un directorio de pasajes en el directorio donde se encuentra el programa, que contiene todos los artículos.