两部分问题....(请记住我是webscraping和BSoup的新手!) 我能够创建一个代码来抓取论坛帖子的主题。但截至目前,它只从论坛的第1页抓取了这些内容。我希望它能够一次抓住所有页面,但不确定如何解决这个问题。 我在网上看到,当URL略有变化时,你可以改变它,以便迭代多个页面。
我想要抓的网址是: http://thailove.net/bbs/board.php?bo_table=ent 和第2页是原始网址+“& page = 2” 这样的事情会起作用吗?: base_url +“& page =”str(2)
其次,我似乎无法将解析后的数据导出到CSV文件中 这是我尝试解析和导出数据:
from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup
import csv
my_url = 'http://thailove.net/bbs/board.php?bo_table=ent'
uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()
page_soup = soup(page_html, "html.parser")
containers = page_soup.findAll("td",{"class":"td_subject"})
for container in containers:
subject = container.a.contents[0]
print("subject: ", subject)
with open('ThaiLove.csv', 'w') as f:
csv_writer = csv.writer(f)
for subject in containers:
value = subject.a.string
if value:
csv_writer.writerow([value.encode('utf-8')])
答案 0 :(得分:0)
一些问题。首先,你不要在这里编码。所以它应该是:
containers = soup.findAll("td",{"class":"td_subject"})
for container in containers:
subject = container.a.contents[0]
print("subject: ", subject)
import csv
with open('ThaiLove.csv', 'w') as f:
csv_writer = csv.writer(f)
for subject in containers:
value = subject.a.contents[0]
if value:
csv_writer.writerow([value])
所有没有UTF-8编码。这给了我:
"\n 미성년자도 이용하는 게시판이므로 글 수위를 지켜주세요. "\n"\n 방꺽너이 방야이운하 수상보트를 타고 가서 볼만한 곳.. "\n"\n 방콕의 대표 야시장 - 딸랏롯파이2 "\n"\n 공항에서 제일 가까운 레드썬 마사지 "\n"\n
等等。
其次,你似乎在向你的csv写错了东西。您希望将代码从findAll
函数复制到write函数。因此,您使用subject.a.string
代替container.a.contents
。
至于抓取后续页面,如果你已经找到了网站的分页格式,那应该可以正常工作。