网页抓取时如何搜索特定的unicode字符串?

时间:2019-04-01 19:51:33

标签: python web-scraping beautifulsoup non-ascii-characters

最近,我对使用Python进行网络抓取感兴趣,并在一些简单的示例中进行了抓取,但是我不知道如何处理不遵循ASCII代码的其他语言。例如,在HTML文件中搜索特定的字符串或使用要写入文件中的字符串。

from urllib.parse import urljoin
import requests
import bs4
website = 'http://book.iranseda.ir'
book_url = 'http://book.iranseda.ir/DetailsAlbum/?VALID=TRUE&g=209103'

soup1 = bs4.BeautifulSoup(requests.get(book_url).text, 'lxml')
match1 = soup1.find_all('a', class_='download-mp3')
for m in match1:
    m = m['href'].replace('q=10', 'q=9')
    url = urljoin(website, m)
    print(url)
    print()

book_url下的本网站上,每一行都有不同的文本,但是这些文本是波斯语的。 假设我需要考虑最后一行。 文字为“صدایکلکتاب” 如何在<li><div><a>标签中搜索此字符串?

1 个答案:

答案 0 :(得分:0)

您需要将编码从requests设置为UTF-8。看来requests模块未使用您想要的解码。如this SO post中所述,您可以告诉请求所需的编码。

from urllib.parse import urljoin
import requests
import bs4
website = 'http://book.iranseda.ir'
book_url = 'http://book.iranseda.ir/DetailsAlbum/?VALID=TRUE&g=209103'

req = requests.get(book_url)
req.encoding = 'UTF-8'
soup1 = bs4.BeautifulSoup(req.text, 'lxml')
match1 = soup1.find_all('a', class_='download-mp3')
for m in match1:
    m = m['href'].replace('q=10', 'q=9')
    url = urljoin(website, m)
    print(url)
    print()

唯一的更改是

req = requests.get(book_url)
req.encoding = 'UTF-8'
soup1 = bs4.BeautifulSoup(req.text, 'lxml')