Tout d'abord, il n'est pas nécessaire d'utiliser le module csv pour répondre à vos besoins csv utilise des virgules demi-largeur pour séparer les différentes colonnes par défaut, mais si le contenu d'une seule colonne a une demi-largeur. virgules, excel la lecture est un peu gênante. I Il est recommandé d'utiliser TAB comme séparateur (délimiteur), puis d'utiliser directement with open(...) as fh pour écrire
.
De plus, il y a deux petits problèmes avec votre code :
La fonction get_data ne doit en fait être appelée qu'une seule fois, il n'est pas nécessaire de l'appeler deux fois
Il y a une barre oblique supplémentaire dans l'url/
# -*- coding:utf-8 -*-
import requests
from bs4 import BeautifulSoup
user_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'
URL = 'http://finance.qq.com'
def get_data(url):
response = requests.get(url)
soup = BeautifulSoup(response.text, 'lxml')
soup = soup.find('p', {'id': 'listZone'}).findAll('a')
return soup
def main():
with open("hello.tsv", "w") as fh:
fh.write("url\ttitile\n")
for item in get_data(URL + "/gdyw.htm"):
fh.write("{}\t{}\n".format(URL + item.get("href"), item.get_text()))
if __name__ == "__main__":
main()
Tout d'abord, il n'est pas nécessaire d'utiliser le module
.csv
pour répondre à vos besoinscsv
utilise des virgules demi-largeur pour séparer les différentes colonnes par défaut, mais si le contenu d'une seule colonne a une demi-largeur. virgules,excel
la lecture est un peu gênante. I Il est recommandé d'utiliserTAB
comme séparateur (délimiteur), puis d'utiliser directementwith open(...) as fh
pour écrireDe plus, il y a deux petits problèmes avec votre code :
La fonction
get_data
ne doit en fait être appelée qu'une seule fois, il n'est pas nécessaire de l'appeler deux foisIl y a une barre oblique supplémentaire dans l'url
/
Résultat :
Parce que vous avez d'abord écrit csvrow1 puis csvrow2, ce qui a abouti à ce résultat, vous devez parcourir csvrow1 et 2 en même temps, comme ceci :