CSDNクロール
python + selenium + parsel + tomd
日焼けした
## 1つ、必要な知識*** 1.パーサーモジュールの基本的な知識***
(1)CSSセレクター
は、Parsel
Import Selector
html からparsel.Selectorオブジェクトを作成する必要があります。これは、Webページリクエストのソースコードにすることができます。または、Selectorオブジェクトを作成した後、
html 形式のstring selector = Selector(html)(xml形式)tags = selector.css( ' 。content ')を通常使用するCSSの
使用を開始し
ます。ここでも
.class_attrを使用して、特定のタグが変更されたときに変更され
ます。.content は、照会
のコンテンツのすべての照会クラスラベルを参照します
の結果は特殊なオブジェクトであり、必要なデータを直接取得することはできません
。css()関数クエリの結果を文字列またはリストに変換するには、関数を使用する必要があります
•get()
•getall()
(2)属性抽出
href_value = selector.css('a::attr(href)').get() #提取href标签的值
title=page.css(".title-article::text").get() #提取文本内容
2.
要素を選択するセレンのメソッド
find_element_by_class_name:クラスに従って検索
find_element_by_css_selector:CSSによると
find_element_by_id:IDに従って検索
find_element_by_link_text:リンクのテキストに従って検索します
find_element_by_name:ノード名に基づいて検索
find_element_by_partial_link_text:テキスト全体に含まれている限り、リンクのテキストに従って検索します
find_element_by_tag_name:タグで検索
find_element_by_xpath:Xpathを使用して検索します
PS:要素を要素に変更すると、すべての適格な要素が検索され、リストが返されます
比如:find_elements_by_class_name
返されるのはweb_elementオブジェクトです
3.tomd
text = tomd.Tomd(content).markdown
は、取得した記事をマークダウン形式に変換します
2、コード表示
1.記事を入手する
#对一篇文章的爬取
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.すべてのブロガーの記事を入手する
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.ブロガーの名前を取得する
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
最後の実行後、すべての記事を含むパッセージディレクトリがプログラムが配置されているディレクトリに生成されます