Я пытался очистить этот сайт "https://bangla.bdnews24.com/". Я использую Python3.
Вот мой код паука:
import scrapy
import hashlib
class PostsSpider(scrapy.Spider):
name = "posts"
start_urls = [
'https://bangla.bdnews24.com/'
]
direc = ''
def parse(self, response):
#get all the article links
post_link_list = response.xpath('//a[contains(@href, "article")]/@href').extract()
#follow link one by one
for post in post_link_list:
hashed_url = self.hashcodes(post).upper()
self.direc = hashed_url + '.json'
yield response.follow(post, callback=self.parse_post)
def parse_post(self, response):
items = {}
items['title'] = response.css('#news-details-page .print-only::text').get(),
items['date'] = response.css('#article_notations span:nth-child(2)::text').get(),
items['content'] = response.css('#storyBody p::text , .article_lead_text .print-only::text').extract()
with open(self.direc, 'w', encoding="utf-8") as f:
f.write(str(items))
yield items
def hashcodes(self, url):
hc = hashlib.md5(url.encode())
return hc.hexdigest()
Я собираю сначала все URL-адреса с главной страницы, а затем следую за ними один за другим. и соскребая данные с тех, разбирая их. Также кодирую ссылки Я хочу поместить отдельные данные, очищенные ссылками, в отдельные файлы json; используя закодированные ссылки в качестве имен локальных каталогов. Но проблема, с которой я сталкиваюсь, заключается в том, что создается только один файл json, и все очищенные данные из всех ссылок попадают в этот один файл, где очищенные данные одной ссылки перезаписываются ближайшие. Поэтому у меня остался один json файл, в котором хранится только последняя ссылка - очищенные данные.
Буду признателен за любые советы о том, как я могу обновить свой код для этого. Заранее спасибо.